package com.aiyige.base.api.service;

import com.aiyige.base.api.ApiUrls;
import com.aiyige.model.AiyigeExceptionModel;
import com.aiyige.model.ChangePhoneNumberModel;
import com.aiyige.model.CreateRefundOrder;
import com.aiyige.model.CustomerRequestModel;
import com.aiyige.model.Oauth2Login;
import com.aiyige.model.Oauth2Register;
import com.aiyige.model.Oauth2ResetPassword;
import com.aiyige.model.PlayProgressModel;
import com.aiyige.model.RefundRejectModel;
import com.aiyige.model.ThirdOauthModel;
import com.aiyige.model.User;
import com.aiyige.model.eshop.Order;
import com.aiyige.model.eshop.OrderCreateModel;
import com.aiyige.model.moment.entity.FavoriteRecord;
import com.aiyige.model.moment.entity.Moment;
import com.aiyige.model.moment.entity.Praise;
import com.aiyige.model.request.AddCommentRequest;
import com.aiyige.model.request.AgreementRequest;
import com.aiyige.model.request.AllShowRequest;
import com.aiyige.model.request.BuyerOrderActionRequest;
import com.aiyige.model.request.CancelPublishRequest;
import com.aiyige.model.request.CategoryAllRequest;
import com.aiyige.model.request.CheckVerifyCodeRequest;
import com.aiyige.model.request.CourseIndexRequest;
import com.aiyige.model.request.CreateCustomerRequest;
import com.aiyige.model.request.CreateOrderRequest;
import com.aiyige.model.request.CreateTagRequest;
import com.aiyige.model.request.DeleteGoodsRequest;
import com.aiyige.model.request.DetailRequest;
import com.aiyige.model.request.FavoriteRequest;
import com.aiyige.model.request.FavouriteRequest;
import com.aiyige.model.request.GetCommentsRequest;
import com.aiyige.model.request.GetGoodsInfoByGoodsIdRequest;
import com.aiyige.model.request.GetPersonalAdsRequest;
import com.aiyige.model.request.GetTagRequest;
import com.aiyige.model.request.HintSearchKeywordRequest;
import com.aiyige.model.request.HintTagsRequest;
import com.aiyige.model.request.HomeRequest;
import com.aiyige.model.request.LoginOtherRequest;
import com.aiyige.model.request.LoginRequest;
import com.aiyige.model.request.MyBuyRequest;
import com.aiyige.model.request.MyFavoriteDeleteRequest;
import com.aiyige.model.request.MyFavoriteRequest;
import com.aiyige.model.request.MyFavoriteSearchRequest;
import com.aiyige.model.request.MyViewDeleteRequest;
import com.aiyige.model.request.OrderDeleteRequest;
import com.aiyige.model.request.OrderDetailRequest;
import com.aiyige.model.request.OrderListForBuyerRequest;
import com.aiyige.model.request.OrderListForSellerRequest;
import com.aiyige.model.request.PersonalHomeRequest;
import com.aiyige.model.request.PersonalShowRequest;
import com.aiyige.model.request.PraiseRequest;
import com.aiyige.model.request.PublishArticleRequest;
import com.aiyige.model.request.PublishCourseVideoImmediateRequest;
import com.aiyige.model.request.PublishCourseVideoRequest;
import com.aiyige.model.request.PublishImageRequest;
import com.aiyige.model.request.PublishVideoRequest;
import com.aiyige.model.request.QueryOwnerGoodsByConditionRequest;
import com.aiyige.model.request.QueryOwnerGoodsByKeyWordRequest;
import com.aiyige.model.request.QueryTypeNoticesRequest;
import com.aiyige.model.request.RegisterRequest;
import com.aiyige.model.request.RequestBindThirdAndSetPasswordBody;
import com.aiyige.model.request.RequestLoginUserBody;
import com.aiyige.model.request.RequestRegisterUserBody;
import com.aiyige.model.request.ResetPasswordRequest;
import com.aiyige.model.request.ScanQRRequest;
import com.aiyige.model.request.SearchBuyerOrdersAllTypeRequest;
import com.aiyige.model.request.SearchByTypeRequest;
import com.aiyige.model.request.SearchRequest;
import com.aiyige.model.request.SearchSellerOrdersAllTypeRequest;
import com.aiyige.model.request.SendVerifyCodeRequest;
import com.aiyige.model.request.SubmitOrganizationCertificationRequest;
import com.aiyige.model.request.SubmitPersonalCertificationRequest;
import com.aiyige.model.request.UpdateUserAdsRequest;
import com.aiyige.model.request.UpdateUserInfoRequest;
import com.aiyige.model.request.UseTagRequest;
import com.aiyige.model.request.WithdrawModel;
import com.aiyige.model.sns.Comment;
import com.aiyige.model.sns.Follow;
import com.aiyige.model.tag.Tag;
import com.aiyige.model.task.Task;
import com.aiyige.page.coupon.model.DrawCouponImmediatelyRequest;
import com.aiyige.page.coupon.model.DrawCouponWithExchangeCodeRequest;
import com.aiyige.page.filter.model.ActivityFilterInfoRequest;
import com.aiyige.page.filter.model.CouponFilterInfoRequest;
import com.aiyige.page.filter.model.FilterInfoRequest;
import com.aiyige.page.interest.model.NotifySearchInterestSelectedRequest;
import com.aiyige.page.interest.model.SelectedInterestRquestModel;
import com.aiyige.page.my.customer.model.CustomerFollowupEntity;
import com.aiyige.page.my.order.model.ConfirmClassedRequestBody;
import com.aiyige.page.my.order.model.RequestRefund;
import com.aiyige.share.model.ShareLogRequest;

import java.util.List;

import okhttp3.MultipartBody;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.DELETE;
import retrofit2.http.GET;
import retrofit2.http.Headers;
import retrofit2.http.Multipart;
import retrofit2.http.PATCH;
import retrofit2.http.POST;
import retrofit2.http.Part;
import retrofit2.http.Path;
import retrofit2.http.Query;
import retrofit2.http.Streaming;
import retrofit2.http.Url;

/**
 * Created by xiachao on 2017/8/10.
 */

public interface ApiService {
    @GET(ApiUrls.androidVersion)
    Call<ResponseBody> checkVersion();

    // 获取验证码
    @POST(ApiUrls.getVerifyCode)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> getVerifyCode(@Body SendVerifyCodeRequest mobile);


    @POST(ApiUrls.index)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> getHomeList(@Body HomeRequest request);

    // 获取验证码
    @POST(ApiUrls.register)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> register(@Body RegisterRequest request);

    @POST(ApiUrls.getPersonalShow)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> getPersonalShow(@Body PersonalShowRequest request);

    @POST(ApiUrls.personalHome)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> personalHome(@Body PersonalHomeRequest request);

    // 校验验证码
    @POST(ApiUrls.verifyCode)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> checkVerifyCode(@Body CheckVerifyCodeRequest request);

    // 重置密码
    @POST(ApiUrls.resetPwd)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> resetPassword(@Body ResetPasswordRequest request);

    // 账号
    @POST(ApiUrls.login)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> login(@Body LoginRequest request);

    // 第三方账号
    @POST(ApiUrls.loginOauth)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> loginByOther(@Body LoginOtherRequest request);


    @POST(ApiUrls.getAllShow)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> getAllShow(@Body AllShowRequest request);

    @POST(ApiUrls.praise)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> praise(@Body PraiseRequest request);

    @POST(ApiUrls.favourite)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> favourite(@Body FavouriteRequest request);

    @GET(ApiUrls.getIndexAds)
    Call<ResponseBody> getIndexAds();

    @POST(ApiUrls.categoryAll)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> categoryAll(@Body CategoryAllRequest request);

    @GET(ApiUrls.hotCity)
    Call<ResponseBody> hotCity(@Query("channel") String channel, @Query("groupType") String groupType);

    @Multipart
    @POST(ApiUrls.uploadAvatar)
    @Headers("enctype: multipart/form-data")
    Call<ResponseBody> uploadAvatar(@Part MultipartBody.Part image);


    @POST(ApiUrls.updateUserAds)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> updateUserAds(@Body UpdateUserAdsRequest request);

    @POST(ApiUrls.updateUserInfo)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> updateUserInfo(@Body UpdateUserInfoRequest request);

    @POST(ApiUrls.getTags)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> getTags(@Body GetTagRequest request);

    @POST(ApiUrls.createTag)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> createTag(@Body CreateTagRequest request);

    @GET(ApiUrls.getTagsHistory)
    Call<ResponseBody> getTagsHistory();

    @GET(ApiUrls.getHotTags)
    Call<ResponseBody> getHotTags();

    @GET(ApiUrls.getGuaranteeConfigs)
    Call<ResponseBody> getGuaranteeConfigs();

    // 获取作品详情
    @POST(ApiUrls.detail)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> detail(@Body DetailRequest request);

    // 获取卖家订单列表
    @POST(ApiUrls.getSellerOrders)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> getSellerOrders(@Body OrderListForSellerRequest request);

    // 获取买家订单列表
    @POST(ApiUrls.getBuyerOrders)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> getBuyerOrders(@Body OrderListForBuyerRequest request);

    @GET(ApiUrls.getQiniuToken)
    Call<ResponseBody> getQiniuToken();

    @GET(ApiUrls.getQiniuDomain)
    Call<ResponseBody> getQiniuDomain();

    @POST(ApiUrls.publishVideo)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> publishVideo(@Body PublishVideoRequest request);

    @POST(ApiUrls.publishCourseVideo)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> publishCourseVideo(@Body PublishCourseVideoRequest request);

    @POST(ApiUrls.publishImage)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> publishImage(@Body PublishImageRequest request);

    @POST(ApiUrls.publishArticle)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> publishArticle(@Body PublishArticleRequest request);

    @POST(ApiUrls.hintTags)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> hintTags(@Body HintTagsRequest request);

    @GET(ApiUrls.getGoodsManageTab)
    Call<ResponseBody> getGoodsManageTab();

    // 订单详情
    @POST(ApiUrls.orderDetail)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> getOrderDetail(@Body OrderDetailRequest request);

    // 收藏
    @POST(ApiUrls.favorite)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> favorite(@Body FavoriteRequest request);

    // 评论
    @POST(ApiUrls.comment)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> comment(@Body AddCommentRequest request);


    @POST(ApiUrls.queryOwnerGoodsByCondition)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> queryOwnerGoodsByCondition(@Body QueryOwnerGoodsByConditionRequest request);

    @POST(ApiUrls.queryOwnerGoodsByKeyWord)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> queryOwnerGoodsByKeyWord(@Body QueryOwnerGoodsByKeyWordRequest request);

    @GET(ApiUrls.getNoticeCountAndRecord)
    Call<ResponseBody> getNoticeCountAndRecord();

    @POST(ApiUrls.queryTypeNotices)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> queryTypeNotices(@Body QueryTypeNoticesRequest request);

    @POST(ApiUrls.cancelOrder)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> cancelOrder(@Body BuyerOrderActionRequest request);

    @POST(ApiUrls.delOrder)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> deleteOrder(@Body OrderDeleteRequest request);

    @POST(ApiUrls.getBuyerOrdersAllType)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> getBuyerOrdersAllType(@Body SearchBuyerOrdersAllTypeRequest request);

    @POST(ApiUrls.getSellerOrdersAllType)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> getSellerOrdersAllType(@Body SearchSellerOrdersAllTypeRequest request);

    @POST(ApiUrls.myFavoriteAllType)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> myFavoriteAllType(@Body MyFavoriteSearchRequest request);

    @POST(ApiUrls.myFavorite)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> myFavorite(@Body MyFavoriteRequest request);


    @POST(ApiUrls.delMyFavorite)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> delMyFavorite(@Body MyFavoriteDeleteRequest request);

    @GET(ApiUrls.myView)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> myView(@Query("keyword") String keyword, @Query("pageSize") long pageSize, @Query("pageNum") long pageNum);

    @POST(ApiUrls.delMyView)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> delMyView(@Body MyViewDeleteRequest request);


    @POST(ApiUrls.myBuy)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> myBuy(@Body MyBuyRequest request);


    @POST(ApiUrls.cancelPublish)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> cancelPublish(@Body CancelPublishRequest request);

    @POST(ApiUrls.deleteGoods)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> deleteGoods(@Body DeleteGoodsRequest request);

    @POST(ApiUrls.getGoodsInfoByGoodsId)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> getGoodsInfoByGoodsId(@Body GetGoodsInfoByGoodsIdRequest request);

    @POST(ApiUrls.publishCourseVideoImmediate)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> publishCourseVideoImmediate(@Body PublishCourseVideoImmediateRequest request);

    @GET(ApiUrls.searchHistoryAndHot)
    Call<ResponseBody> searchHistoryAndHot();

    @POST(ApiUrls.hintSearchKeyword)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> hintSearchKeyword(@Body HintSearchKeywordRequest request);


    @POST(ApiUrls.search)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> search(@Body SearchRequest request);

    @POST(ApiUrls.searchByType)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> searchByType(@Body SearchByTypeRequest request);

    @POST(ApiUrls.courseIndex)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> courseIndex(@Body CourseIndexRequest request);

    @POST(ApiUrls.useTag)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> useTag(@Body UseTagRequest request);

    @POST(ApiUrls.createTask)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> createTask(@Body Task task);

    @GET(ApiUrls.delMySearch)
    Call<ResponseBody> delMySearch();

    @POST(ApiUrls.moreComments)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> moreComments(@Body GetCommentsRequest request);

    @POST(ApiUrls.createOrder)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> createOrder(@Body CreateOrderRequest request);

    @GET(ApiUrls.tag_tags_search_findByCreatorAndGroupType)
    Call<ResponseBody> tag_tags_search_findByCreatorAndGroupType(@Query("creator") String creator, @Query("groupType") String groupType);

    @POST(ApiUrls.tag_tags)
    Call<ResponseBody> tag_tags();

    @POST(ApiUrls.getPersonalAds)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> getPersonalAds(@Body GetPersonalAdsRequest request);

    @Streaming
    @GET(ApiUrls.setup)
    Call<ResponseBody> setup(@Query("version") String version, @Query("md5") String md5);


    @GET(ApiUrls.eShop_sellerStatistics)
    Call<ResponseBody> eShopSellerStatistics(@Path("id") String id);

    @PATCH(ApiUrls.userCenter_users)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> userCenterUsers(@Path("id") String id, @Body User user);

    @GET(ApiUrls.userCenter_users)
    Call<ResponseBody> userCenterUsers(@Path("id") String id);

    @GET(ApiUrls.dynamicShow)
    Call<ResponseBody> dynamicShow(@Query("userId") String userId, @Query("pageSize") long pageSize, @Query("pageNum") long pageNum);

    @DELETE(ApiUrls.deleteMoment)
    Call<ResponseBody> deleteMoment(@Path("id") String id);

    @GET(ApiUrls.homeMoment)
    Call<ResponseBody> homeMoment(@Path("order_engine") String orderEngine, @Query("pageSize") long pageSize, @Query("pageNum") long pageNum, @Query("subject") List<String> subject, @Query("tags") List<String> tags);

    @GET(ApiUrls.learnMoment)
    Call<ResponseBody> learnMoment(@Path("order_engine") String orderEngine, @Query("pageSize") long pageSize, @Query("pageNum") long pageNum, @Query("subject") List<String> subject, @Query("tags") List<String> tags);

    @GET(ApiUrls.learnMoment)
    Call<ResponseBody> learnMoment(@Path("order_engine") String orderEngine, @Query("pageSize") long pageSize, @Query("pageNum") long pageNum, @Query("subject") List<String> subject, @Query("tags") List<String> tags, @Query("hasMore") int hasMore);


    @GET(ApiUrls.findTagByCreatorAndGroupType)
    Call<ResponseBody> findTagByCreatorAndGroupType(@Query("creator") String creator, @Query("groupType") String groupType);

    @POST(ApiUrls.momentSaveOnly)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> momentSaveOnly(@Body Moment moment);

    @POST(ApiUrls.momentPublish)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> momentPublish(@Body Moment moment);

    @PATCH(ApiUrls.editMoment)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> editMoment(@Path("id") String id, @Path("action_engine") String actionEngine, @Body Moment moment);

    @GET(ApiUrls.oss)
    Call<ResponseBody> oss(@Query("key") String key);

    @GET(ApiUrls.oss)
    Call<ResponseBody> oss();

    @GET(ApiUrls.merchandiseManagementMoment)
    Call<ResponseBody> merchandiseManagementMoment(@Query("pageSize") long pageSize, @Query("pageNum") long pageNum, @Query("subject") List<String> subject, @Query("status") Integer status);

    @GET(ApiUrls.merchandiseManagementMoment)
    Call<ResponseBody> merchandiseManagementMoment(@Query("pageSize") long pageSize, @Query("pageNum") long pageNum, @Query("subject") List<String> subject, @Query("status") Integer status, @Query("hasMore") int hasMore);

    @GET(ApiUrls.dynamicManagementMoment)
    Call<ResponseBody> dynamicManagementMoment(@Query("pageSize") long pageSize, @Query("pageNum") long pageNum, @Query("subject") List<String> subject, @Query("status") Integer status);

    @GET(ApiUrls.dynamicManagementMoment)
    Call<ResponseBody> dynamicManagementMoment(@Query("pageSize") long pageSize, @Query("pageNum") long pageNum, @Query("subject") List<String> subject, @Query("status") Integer status, @Query("hasMore") int hasMore);

    @Streaming
    @GET(ApiUrls.allCity)
    Call<ResponseBody> allCity(@Query("version") String version, @Query("md5") String md5);

    @GET(ApiUrls.allChannel)
    Call<ResponseBody> allChannel(@Query("version") String version);


    @GET(ApiUrls.getSetup)
    Call<ResponseBody> getSetup(@Path("groupType") String groupType, @Query("version") String version, @Query("channel") String channel);

    @GET(ApiUrls.getUserTag)
    Call<ResponseBody> getUserTag(@Query("creator") String creator, @Query("channel") String channel, @Query("groupType") String groupType);

    @POST(ApiUrls.createUserTag)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> createUserTag(@Body Tag tag);

    @GET(ApiUrls.getHistoryTag)
    Call<ResponseBody> getHistoryTag(@Query("groupType") String groupType);

    @GET(ApiUrls.getPopularTag)
    Call<ResponseBody> getPopularTag(@Query("groupType") String groupType);

    @GET(ApiUrls.getHintTag)
    Call<ResponseBody> getHintTag(@Query("groupType") String groupType, @Query("keyword") String keyword);

    @GET(ApiUrls.searchMomentSummary)
    Call<ResponseBody> seachMomentSummary(@Path("module_engine") String moduleEngine, @Query("keyword") String keyword);

    @GET(ApiUrls.searchMomentSummary)
    Call<ResponseBody> seachMomentSummary(@Path("module_engine") String moduleEngine, @Query("keyword") String keyword, @Query("hasMore") int hasMore);

    @GET(ApiUrls.searchMomentSummary)
    Call<ResponseBody> seachFavoriteSummary(@Path("module_engine") String moduleEngine, @Query("keyword") String keyword, @Query("subject") List<String> subjectList);

    @GET(ApiUrls.searchMoment)
    Call<ResponseBody> searchMoment(@Path("module_engine") String moduleEngine, @Path("order_engine") String orderEngine, @Query("subject") List<String> subjectList, @Query("keyword") String keyword, @Query("pageSize") long pageSize, @Query("pageNum") long pageNum);

    @GET(ApiUrls.searchMoment)
    Call<ResponseBody> searchMoment(@Path("module_engine") String moduleEngine, @Path("order_engine") String orderEngine, @Query("subject") List<String> subjectList, @Query("keyword") String keyword, @Query("pageSize") long pageSize, @Query("pageNum") long pageNum, @Query("hasMore") int hasMore);

    @PATCH(ApiUrls.changeMomentStatus)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> changeMomentStatus(@Path("id") String id, @Path("action_engine") String actionEngine, @Body Moment moment);

    @PATCH(ApiUrls.bindCardOrCourse)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> bindCardOrCourse(@Path("id") String id, @Path("action_engine") String actionEngine, @Body Moment moment);

    @GET(ApiUrls.fetchByMobile)
    Call<ResponseBody> fetchByMobile(@Query("mobile") String mobile, @Query("type") String type);

    @POST(ApiUrls.userRegister)
    Call<ResponseBody> userRegister(@Query("code") String code, @Body RequestRegisterUserBody request);

    @PATCH(ApiUrls.bindPhoneAndSetPassword)
    Call<ResponseBody> bindPhoneAndSetPassword(@Query("code") String code, @Body RequestBindThirdAndSetPasswordBody request);

    @PATCH(ApiUrls.userResetPassword)
    Call<ResponseBody> userResetPassword(@Query("code") String code, @Body RequestRegisterUserBody request);

    @PATCH(ApiUrls.userLogin)
    Call<ResponseBody> userLogin(@Body RequestLoginUserBody request);

    @PATCH(ApiUrls.userLogout)
    Call<ResponseBody> userLogout(@Body User request);

    @POST(ApiUrls.thirdOauth)
    Call<ResponseBody> thirdOauth(@Body User request);

    @GET(ApiUrls.getMoment)
    Call<ResponseBody> getMoment(@Path("id") String id, @Query("source") String source, @Query("resourceId") String resourceId);

    @GET(ApiUrls.getMoment)
    Call<ResponseBody> getMoment(@Path("id") String id, @Query("source") String source, @Query("resourceId") String resourceId, @Query("tid") String tid, @Query("code") int code);


    @GET(ApiUrls.getMoment)
    Call<ResponseBody> getMoment(@Path("id") String id);

    @GET(ApiUrls.getComments)
    Call<ResponseBody> getComments(@Query("originObjectId") String momentId, @Query("pageNum") int pageNum, @Query("pageSize") int pageSize);

    @POST(ApiUrls.addComment)
    Call<ResponseBody> addComment(@Body Comment comment);

    @POST(ApiUrls.addPraises)
    Call<ResponseBody> addPraises(@Body Praise praise);

    @DELETE(ApiUrls.deletePraises)
    Call<ResponseBody> deletePraises(@Path("id") String id);

    @POST(ApiUrls.addFavourite)
    Call<ResponseBody> addFavorite(@Body FavoriteRecord favoriteRecord);

    @DELETE(ApiUrls.deleteFavorite)
    Call<ResponseBody> deleteFavorite(@Path("id") String id);

    @POST(ApiUrls.deleteSomeTask)
    Call<ResponseBody> deleteTasks(@Body Task task);

    @GET(ApiUrls.getFavourites)
    Call<ResponseBody> getFavorites(@Query("subject") List<String> subject, @Query("keyword") String keyword, @Query("pageSize") long pageSize, @Query("pageNum") long pageNum);


    @GET(ApiUrls.hotSearchKeyword)
    Call<ResponseBody> hotSearchKeyword();

    @GET(ApiUrls.historySearchKeyword)
    Call<ResponseBody> historySearchKeyword(@Query("userId") String userId);

    @GET(ApiUrls.searchKeywordAssociate)
    Call<ResponseBody> searchKeywordAssociate(@Query("keyword") String keyword);

    @GET(ApiUrls.messageSummary)
    Call<ResponseBody> messageSummary();

    @GET(ApiUrls.message)
    Call<ResponseBody> message(@Query("type") String type, @Query("pageSize") long pageSize, @Query("pageNum") long pageNum);


    @GET(ApiUrls.productService)
    Call<ResponseBody> productService(@Query("userId") String userId, @Query("subject") List<String> subject, @Query("pageSize") long pageSize, @Query("pageNum") long pageNum);


    @GET(ApiUrls.productService)
    Call<ResponseBody> productService(@Query("userId") String userId, @Query("subject") List<String> subject, @Query("pageSize") long pageSize, @Query("pageNum") long pageNum, @Query("hasMore") int hasMore);

    @POST(ApiUrls.createOrder)// 这是在0.4之前开发的创建订单接口，现在0.4强龙改用其他接口来创建订单了。
    @Headers("Content-Type: application/json")
    Call<ResponseBody> createOrder(@Body Order order);


    @PATCH(ApiUrls.payOrder)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> payOrder(@Path("id") String id, @Body Order order);

    @PATCH(ApiUrls.payRefundOrder)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> payRefundOrder(@Path("id") String id, @Body Order order);

    @POST(ApiUrls.changeQuantity)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> changeQuantity(@Body Order order);


    @POST(ApiUrls.createOrder)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> createOrder(@Body OrderCreateModel order);

    @POST(ApiUrls.createOrder)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> createOrder(@Body OrderCreateModel order, @Query("tid") String tid, @Query("code") int code);

    @GET
    Call<ResponseBody> get(@Url String url);

    @GET(ApiUrls.checkPayResult)
    Call<ResponseBody> checkPayResult(@Query("code") String code);

    @GET(ApiUrls.discoveryMoment)
    Call<ResponseBody> discoveryMoment(@Query("pageSize") long pageSize, @Query("pageNum") long pageNum, @Query("subject") List<String> subject, @Query("tags") List<String> tags);


    @POST(ApiUrls.addFollow)
    Call<ResponseBody> addFollow(@Body Follow follow);

    @DELETE(ApiUrls.deleteFollow)
    Call<ResponseBody> deleteFollow(@Path("id") String id);

    @GET(ApiUrls.getFanList)
    Call<ResponseBody> getFanList(@Query("beFollowedId") String id, @Query("pageSize") long pageSize, @Query("pageNum") long pageNum);

    @GET(ApiUrls.getFollowList)
    Call<ResponseBody> getFollowList(@Query("followerId") String id, @Query("pageSize") long pageSize, @Query("pageNum") long pageNum);


    @GET(ApiUrls.getBuyerOrder)
    Call<ResponseBody> getBuyerOrder(@Query("subject") List<String> subject, @Query("timePeriod") String timePeriod, @Query("uiStatus") String uiStatus, @Query("pageNum") long pageNum, @Query("pageSize") long pageSize);

    @GET(ApiUrls.buyerOrdersAllType)
    Call<ResponseBody> getUserOrderZone(@Query("keyword") String keyword);

    @GET(ApiUrls.buyerOrders)
    Call<ResponseBody> getBuyerOrders(@Query("keyword") String keyword, @Query("statusSet") String statusSet, @Query("pageNum") long pageNum, @Query("pageSize") long pageSize);

    @GET(ApiUrls.myBuyList)
    Call<ResponseBody> getMyBuyList(@Query("keyword") String keyword, @Query("owner") String owner, @Query("resourceType") String resourceType, @Query("pageNum") long pageNum, @Query("pageSize") long pageSize);

    @PATCH(ApiUrls.changeOrder)
    Call<ResponseBody> changeOrder(@Path("id") String id, @Path("action_engine") String action_engine, @Body Order order);

    @GET(ApiUrls.getSellerOrderList)
    Call<ResponseBody> getSellerOrderList(@Query("subject") List<String> subject, @Query("timePeriod") String timePeriod, @Query("uiStatus") String uiStatus, @Query("pageNum") long pageNum, @Query("pageSize") long pageSize);

    @GET(ApiUrls.sellerOrdersAllType)
    Call<ResponseBody> getSellerOrderZone(@Query("keyword") String keyword);

    @GET(ApiUrls.sellerOrders)
    Call<ResponseBody> getSellerOrders(@Query("keyword") String keyword, @Query("statusSet") String statusSet, @Query("pageNum") long pageNum, @Query("pageSize") long pageSize);

    @GET(ApiUrls.buyerOrderDetail)
    Call<ResponseBody> getBuyerOrderDetail(@Path("id") String orderId, @Query("type") String type);

    @GET(ApiUrls.sellerOrderDetail)
    Call<ResponseBody> getSellerOrderDetail(@Path("id") String orderId, @Query("type") String type);

    @GET(ApiUrls.setupInfo)
    Call<ResponseBody> setupInfo();

    @GET(ApiUrls.orderVerify)
    Call<ResponseBody> orderVerify(@Query("momentId") String momentId, @Query("version") int version);

    @GET(ApiUrls.customerList)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> getCustomerList(@Path("order_engine") String orderEngine,
                                       @Query("type") String type,
                                       @Query("keyword") String keyword,
                                       @Query(value = "filters", encoded = true) String filters,
                                       @Query("pageNum") String pageNum,
                                       @Query("pageSize") String pageSize);

    @GET(ApiUrls.customerFilter)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> getCustomerFilter(@Query("subject") String subject,
                                         @Query("tagId") String tagId,
                                         @Query("pageNum") String pageNum,
                                         @Query("pageSize") String pageSize);

    @GET(ApiUrls.customerFollowUpList)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> getCustomerFollowupList(@Query("customerId") String customerId,
                                               @Query("pageNum") String pageNum,
                                               @Query("pageSize") String pageSize);

    @GET(ApiUrls.customerOrderList)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> getCustomerOrderList(@Query("customerId") String customerId,
                                            @Query("pageNum") String pageNum,
                                            @Query("pageSize") String pageSize);

    @PATCH(ApiUrls.customerInfoPatch)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> customerPatch(@Path("id") String id, @Body CustomerRequestModel customer);


    @POST(ApiUrls.addCustomerFollowups)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> addCustomerFollowups(@Body CustomerFollowupEntity customer);

    @GET(ApiUrls.availableTraingCard)
    Call<ResponseBody> availableTraingCard(@Query("pageNum") long pageNum, @Query("pageSize") long pageSize);

    @GET(ApiUrls.availableCourse)
    Call<ResponseBody> availableCourse(@Query("pageNum") long pageNum, @Query("pageSize") long pageSize);

    @POST(ApiUrls.videoCourseStudyProgresses)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> videoCourseStudyProgresses(@Body PlayProgressModel playIndexProgressRequestModel);


    @POST(ApiUrls.checkSensitiveWord)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> checkSensitiveWord(@Body Moment moment);

    @POST(ApiUrls.authByQrcode)// 扫码登录
    @Headers("Content-Type: application/json")
    Call<ResponseBody> authByQrcode(@Body ScanQRRequest scanQRRequest);


    @POST// 日志系统上传
    @Headers("Content-Type: application/json")
    Call<ResponseBody> submitException(@Url String url, @Body AiyigeExceptionModel exceptionModel);

    @PATCH(ApiUrls.oauth2Login)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> oauth2Login(@Body Oauth2Login login);

    @GET(ApiUrls.oauth2UserInfo)
    Call<ResponseBody> oauth2UserInfo(@Path("id") String id);

    @POST(ApiUrls.oauth2Register)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> oauth2Register(@Query("code") String code, @Body Oauth2Register register);

    @POST(ApiUrls.oauth2ThirdLogin)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> oauth2ThirdLogin(@Body User request);

    @PATCH(ApiUrls.oauth2ResetPassword)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> oauth2ResetPassword(@Query("code") String code, @Body Oauth2ResetPassword resetPassword);

    @POST(ApiUrls.recommendInterest)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> recommendInterest(@Body SelectedInterestRquestModel model);

    @GET(ApiUrls.recommendIndustry)
    Call<ResponseBody> recommendIndustry();


    @POST(ApiUrls.guessIndustry)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> guessIndustry(@Body SelectedInterestRquestModel model);

    @POST(ApiUrls.addInterest)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> addInterest(@Body Tag avocation);

    @GET(ApiUrls.recentUseInterest)
    Call<ResponseBody> recentUseInterest();

    @GET(ApiUrls.myPage)
    Call<ResponseBody> myPage();

    @PATCH(ApiUrls.agreeGuarantee)
    Call<ResponseBody> agreeGuarantee(@Path("id") String id);

    @PATCH(ApiUrls.ignoreGuarantee)
    Call<ResponseBody> ignoreGuarantee(@Path("id") String id);

    @GET(ApiUrls.getAd)
    Call<ResponseBody> getAd(@Query("position") String position);

    @GET(ApiUrls.getGuarantee)
    Call<ResponseBody> getGuarantee(@Query("subject") String subject);

    @GET(ApiUrls.refreshMomentList)
    Call<ResponseBody> refreshMomentList(@Query("column") String column);

    @GET(ApiUrls.recommendMommentList)
    Call<ResponseBody> recommendMommentList(@Query("column") String column, @Query("pageNum") long pageNum, @Query("pageSize") long pageSize);

    @POST(ApiUrls.requestRefund)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> requestRefund(@Body RequestRefund requestRefund);

    @GET(ApiUrls.findSetupByGroupTypeAndSubGroupType)
    Call<ResponseBody> findSetupByGroupTypeAndSubGroupType(@Query("groupType") String groupType, @Query("subGroupType") String subGroupType);

    @GET(ApiUrls.myWalletLogs)
    Call<ResponseBody> getWalletDetailList(@Query("pageNum") String pageNum,
                                           @Query("pageSize") String pageSize);

    @GET(ApiUrls.getWalletAggLogsList)
    Call<ResponseBody> getWalletAggLogsList(@Path("id") String id);


    @POST(ApiUrls.withdraw)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> withdraw(@Body WithdrawModel requestWithdraw);

    @PATCH(ApiUrls.confirmClassed)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> confirmClassed(@Path("id") String id, @Body ConfirmClassedRequestBody body);

    @GET(ApiUrls.orderRefunds)
    Call<ResponseBody> orderRefunds(@Path("id") String id, @Query("role") String role);

    @PATCH(ApiUrls.reject)
    Call<ResponseBody> reject(@Path("id") String id, @Body RefundRejectModel refundRejectModel);

    @PATCH(ApiUrls.agree)
    Call<ResponseBody> agree(@Path("id") String id);

    @POST(ApiUrls.filterLearnVideo)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> filterLearnVideo(@Path("order_engine") String orderEngine, @Body FilterInfoRequest filterInfoRequest, @Query("pageNum") long pageNum, @Query("pageSize") long pageSize);

    @POST(ApiUrls.filterMajorCourse)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> filterMajorCourse(@Path("order_engine") String orderEngine, @Body FilterInfoRequest filterInfoRequest, @Query("pageNum") long pageNum, @Query("pageSize") long pageSize);

    @POST(ApiUrls.filterActivity)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> filterActivity(@Path("order_engine") String orderEngine, @Body ActivityFilterInfoRequest filterInfoRequest, @Query("pageNum") long pageNum, @Query("pageSize") long pageSize);

    @GET(ApiUrls.myWaitPayCount)
        // 待收款统计
    Call<ResponseBody> myWaitPayCount(@Query("pageNum") String pageNum, @Query("pageSize") String pageSize);

    @GET(ApiUrls.myWaitPayDetails)
        // 待收款明细
    Call<ResponseBody> myWaitPayDetails(@Query("momentId") String momentId, @Query("pageNum") String pageNum, @Query("pageSize") String pageSize);

    @GET(ApiUrls.getMajorCourseFilter)
    Call<ResponseBody> getMajorCourseFilter();

    @GET(ApiUrls.getLearnVideoFilter)
    Call<ResponseBody> getLearnVideoFilter();

    @GET(ApiUrls.getLearnFilterPageEntryBg)
    Call<ResponseBody> getLearnFilterPageEntryBg();

    @GET(ApiUrls.guessYouLike)
    Call<ResponseBody> guessYouLike(@Query("pageNum") long pageNum, @Query("pageSize") long pageSize);

    @GET(ApiUrls.recommendFollow)
    Call<ResponseBody> recommendFollow(@Query("pageNum") long pageNum, @Query("pageSize") long pageSize);

    @GET(ApiUrls.mutualFans)
    Call<ResponseBody> mutualFans(@Query("pageNum") long pageNum, @Query("pageSize") long pageSize);

    @POST(ApiUrls.shareLog)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> shareLog(@Body ShareLogRequest request);


    @POST(ApiUrls.createCustomer)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> createCustomer(@Body CreateCustomerRequest request);

    @GET(ApiUrls.getLearnVideoDivide)
    Call<ResponseBody> getLearnVideoDivide();

    @GET(ApiUrls.getMajorCourseDivide)
    Call<ResponseBody> getMajorCourseDivide();

    @GET(ApiUrls.allSearchZone)
    Call<ResponseBody> allSearchZone(@Query("keyword") String keyword, @Query("subject") String subject, @Query("pageNum") long pageNum, @Query("pageSize") long pageSize);

    @GET(ApiUrls.searchUser)
    Call<ResponseBody> searchUser(@Query("keyword") String keyword, @Query("pageNum") long pageNum, @Query("pageSize") long pageSize);

    @GET(ApiUrls.getActivityFilter)
    Call<ResponseBody> getActivityFilter(@Query("sourceId") String sourceId);

    @GET(ApiUrls.getActivityEntry)
    Call<ResponseBody> getActivityEntry(@Query("ids") List<String> ids);

    @GET(ApiUrls.getActivityEntryById)
    Call<ResponseBody> getActivityEntryById(@Path("id") String ids);

    @GET(ApiUrls.getAvailableCouponCount)
    Call<ResponseBody> getAvailableCouponCount();

    @GET(ApiUrls.userCoupon)
    Call<ResponseBody> userCoupon(@Query("pageNum") long pageNum, @Query("pageSize") long pageSize);

    @POST(ApiUrls.drawCouponWithExchangeCode)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> drawCouponWithExchangeCode(@Body DrawCouponWithExchangeCodeRequest request);

    @GET(ApiUrls.userHistoryCoupon)
    Call<ResponseBody> userHistoryCoupon(@Query("pageNum") long pageNum, @Query("pageSize") long pageSize);

    @GET(ApiUrls.drawCouponCenterList)
    Call<ResponseBody> drawCouponCenterList(@Query("pageNum") long pageNum, @Query("pageSize") long pageSize);

    @POST(ApiUrls.drawCouponImmediately)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> drawCouponImmediately(@Body DrawCouponImmediatelyRequest request);

    @GET(ApiUrls.activityZoneClickStatistics)
    Call<ResponseBody> activityZoneClickStatistics(@Path("id") String id);

    @GET(ApiUrls.couponFilter)
    Call<ResponseBody> couponFilter(@Query("sourceId") String sourceId);

    @POST(ApiUrls.couponFilterMoment)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> couponFilterMoment(@Path("order_engine") String orderEngine, @Body CouponFilterInfoRequest request, @Query("pageNum") long pageNum, @Query("pageSize") long pageSize);

    @PATCH(ApiUrls.bindThirdOauth)
    Call<ResponseBody> bindThirdOauth(@Body ThirdOauthModel request);

    @PATCH(ApiUrls.unbindThirdOauth)
    Call<ResponseBody> unbindThirdOauth(@Body ThirdOauthModel request);


    @PATCH(ApiUrls.changeMobile)
    Call<ResponseBody> changeMobile(@Body ChangePhoneNumberModel request);

    @GET(ApiUrls.findDeafultByMomentId)
    Call<ResponseBody> findDeafultByMomentId(@Query("momentId") String momentId, @Query("fullAmount") double fullAmount);

    @GET(ApiUrls.chooseUserConpons)
    Call<ResponseBody> chooseUserConpons(@Query("momentId") String momentId, @Query("fullAmount") double fullAmount, @Query("pageSize") long pageSize, @Query("pageNum") long pageNum);

    @GET(ApiUrls.getDependOnPopulationNotify)
    Call<ResponseBody> getDependOnPopulationNotify();

    @GET(ApiUrls.searchInterestByName)
    Call<ResponseBody> searchInterestByName(@Query("name") String name);

    @GET(ApiUrls.recommendInterestForUser)
    Call<ResponseBody> recommendInterestForUser(@Query("pageNum") long pageNum, @Query("pageSize") long pageSize);

    @GET(ApiUrls.recommendInterestForNewUser)
    Call<ResponseBody> recommendInterestForNewUser(@Query("pageNum") long pageNum, @Query("pageSize") long pageSize);

    @GET(ApiUrls.recommendInterestForMoment)
    Call<ResponseBody> recommendInterestForMoment(@Query("pageNum") long pageNum, @Query("pageSize") long pageSize);

    @GET(ApiUrls.getHistoryInterest)
    Call<ResponseBody> getHistoryInterest();

    @POST(ApiUrls.notifySearchInterestSelected)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> notifySearchInterestSelected(@Body NotifySearchInterestSelectedRequest request);

    @GET(ApiUrls.refundOrderFees)
    Call<ResponseBody> checkUnpaid();

    @POST(ApiUrls.refundOrderFees)
    Call<ResponseBody> createRefundOrder(@Body CreateRefundOrder request);

    @GET(ApiUrls.getServiceACCIDList)
    Call<ResponseBody> getServiceACCIDList();

    @GET(ApiUrls.getUserAuthenticationInfo)
    Call<ResponseBody> getUserAuthenticationInfo();

    @POST(ApiUrls.userAgreements)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> userAgreements(@Body AgreementRequest request);

    @POST(ApiUrls.submitPersonalCertification)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> submitPersonalCertification(@Body SubmitPersonalCertificationRequest request);

    @POST(ApiUrls.submitOrganizationCertification)
    @Headers("Content-Type: application/json")
    Call<ResponseBody> submitOrganizationCertification(@Body SubmitOrganizationCertificationRequest request);



    @GET(ApiUrls.userTodoTasks)
    Call<ResponseBody> userTodoTasks(@Query("location") String location);



}

